package com.tbynet.jwp.framework.interceptor;

import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;
import com.jfinal.kit.Ret;
import com.jfinal.log.Log;
import com.tbynet.jwp.framework.exception.*;

// 创建全局异常处理器
public class ExceptionInterceptor implements Interceptor {
    private static final Log log = Log.getLog(ExceptionInterceptor.class);

    @Override
    public void intercept(Invocation inv) {
        try {
            inv.invoke(); // 执行Controller方法
        } catch (BusinessException e) {
            // 业务异常：返回友好信息
            inv.getController().renderJson(Ret.fail(e.getCode(), e.getMessage()));
        } catch (ControllerException e) {
            // 控制器异常：返回参数错误信息
            inv.getController().renderJson(Ret.fail(e.getCode(), e.getMessage()));
        } catch (RepositoryException e) {
            // 数据层异常：屏蔽底层细节，记录日志
            log.error("数据访问异常", e);
            inv.getController().renderJson(Ret.fail("SYSTEM_ERROR", "系统繁忙，请稍后再试"));
        } catch (Exception e) {
            // 未知异常：记录详细日志，返回通用信息
            log.error("系统未知异常", e);
            inv.getController().renderJson(Ret.fail("SYSTEM_ERROR", "系统异常，请联系管理员"));
        }
    }

}
